package com.example.demo22.service.impl;

import com.example.demo22.dto.UserDTO;
import com.example.demo22.entity.User;
import com.example.demo22.mapper.UserMapper;
import com.example.demo22.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * UserService 接口的实现类
 */
@Slf4j
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 用户注册逻辑
     * @param userDTO 前端传来的用户数据（用户名、密码、邮箱等）
     */
    @Override
    public void register(UserDTO userDTO) {
        log.info("Service接收注册数据：" + userDTO);

        // 把 DTO 转成实体类
        User user = new User();
        user.setUsername(userDTO.getUsername());
        user.setPassword(userDTO.getPassword());
        user.setEmail(userDTO.getEmail());
        user.setSex("");  // 可根据需求补充
        user.setRole("普通用户");  // 默认角色为普通用户

        // 把数据存入数据库
        userMapper.addUser(user);
    }

    /**
     * 用户登录逻辑
     * @param userDTO 包含用户名和密码的数据传输对象
     * @return 登录成功的用户对象，或 null 表示失败
     */
    @Override
    @Transactional
    public User login(UserDTO userDTO) {
        // 调用 Mapper 查询数据库
        User user = userMapper.findUserByUsernameAndPassword(userDTO.getUsername(), userDTO.getPassword());

        // 如果查询到数据，更新登录信息
        if (user != null) {
            userMapper.updateLoginInfo(user.getId());
            // 记录登录日志（后续可以添加）
        }
        return user;
    }

    /**
     * 根据用户 ID 删除用户（用于注销账号）
     * @param userId 要删除的用户 ID
     */
    @Override
    public void deleteUserById(Long userId) {
        // 调用 Mapper 删除指定 ID 的用户
        userMapper.deleteUserById(userId);
    }

    /**
     * 修改用户密码
     */
    @Override
    public void updatePassword(Long userId, String newPassword) {
        userMapper.updatePassword(userId, newPassword);
    }

    /**
     * 更新用户信息
     */
    @Override
    public void updateUserInfo(User user) {
        userMapper.updateUser(user);
    }

    /**
     * 根据用户名查找用户
     */
    @Override
    public User findByUsername(String username) {
        return userMapper.findByUsername(username);
    }

    /**
     * 查询所有用户
     */
    @Override
    public List<User> findAllUsers() {
        return userMapper.findAll();
    }

    /**
     * 统计总登录次数
     */
    @Override
    public int countTotalLogins() {
        // 这里需要实际查询登录日志表
        // 简化示例，实际应从login_log表统计
        List<User> allUsers = userMapper.findAll();
        int totalLogins = 0;
        for (User user : allUsers) {
            if (user.getLoginCount() != null) {
                totalLogins += user.getLoginCount();
            }
        }
        return totalLogins;
    }

    /**
     * 统计今日登录次数
     */
    @Override
    public int countTodayLogins() {
        // 实际应查询今天的登录日志
        // 简化示例
        return 0;
    }
}